package jp.fsoriented.toishi.data;

import org.json.JSONException;
import org.json.JSONObject;

import android.os.Parcel;
import android.os.Parcelable;

/**
 * みことばの位置を表すクラス
 */
public class VersePtr implements Parcelable {

	/** 書簡 */
	public int book;
	/** 章 */
	public int chapter;
	/** 節 */
	public int verse;

	/**
	 * コンストラクタ
	 */
	public VersePtr() {
		this(0, 0, 0);
	}

	/**
	 * コンストラクタ
	 * 
	 * @param book
	 *            書簡を表す番号
	 * @param chapter
	 *            章番号
	 * @param verse
	 *            節番号
	 */
	public VersePtr(int book, int chapter, int verse) {
		set(book, chapter, verse);
	}

	/**
	 * コピーコンストラクタ
	 * 
	 * @param ptr
	 *            元となるオブジェクト
	 */
	public VersePtr(VersePtr ptr) {
		set(ptr.book, ptr.chapter, ptr.verse);
	}

	/**
	 * 指定されたオブジェクトと同じ値をセットする
	 * 
	 * @param ptr
	 */
	public void set(VersePtr ptr) {
		set(ptr.book, ptr.chapter, ptr.verse);
	}

	/**
	 * 指定されたデータをまとめてセットする
	 * 
	 * @param book
	 *            書簡を表す番号
	 * @param chapter
	 *            章番号
	 * @param verse
	 *            節番号
	 */
	public void set(int book, int chapter, int verse) {
		this.book = book;
		this.chapter = chapter;
		this.verse = verse;
	}

	public int describeContents() {
		return 0;
	}

	public void writeToParcel(Parcel dest, int flags) {
		dest.writeInt(book);
		dest.writeInt(chapter);
		dest.writeInt(verse);
	}

	public static final Parcelable.Creator<VersePtr> CREATOR = new Parcelable.Creator<VersePtr>() {
		public VersePtr createFromParcel(Parcel in) {
			return new VersePtr(in.readInt(), in.readInt(), in.readInt());
		}

		public VersePtr[] newArray(int size) {
			return new VersePtr[size];
		}
	};

	public JSONObject asJSONObject() throws JSONException {
		JSONObject obj = new JSONObject();
		obj.put("book", book);
		obj.put("chapter", chapter);
		obj.put("verse", verse);
		return obj;
	}

	public static VersePtr fromJsonObject(JSONObject obj) throws JSONException {
		return new VersePtr(obj.getInt("book"), obj.getInt("chapter"), obj.getInt("verse"));
	}

}
